Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
data.table 1.12.8 using 8 threads (see ?getDTthreads).  Latest news: r-datatable.com

1 Evolution in Switzerland and Western Europe

The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.

IMPORTANT NOTE: The graphics below show values provided by official sources between 0 and 48h before the last update of this document. As an exemple, for Switzerland, you’ll see the values up to October 22 at 12AM, even though the gaphics were update on October 24 at 1AM! This is due to the lag between the time slot for communicating official figures and the time slot used by Johns Hopkins CSSE for releasing in their Git repository the aggregated figures for all official sources.

1.1 Switzerland

1.2 Italy

1.3 France

1.4 Germany

1.5 Austria

1.6 Spain

1.7 Great Britain

1.8 Denmark

1.9 Norway

1.10 Sweden

1.11 Finland

1.12 Iceland

1.13 Belgium

2 What Happened in Hubei Province (China)

3 What Is Happening in USA

4 Comparison of Number of Confirmed Cases in Western Europe

5 Comparison of Number of Deaths in Western Europe

6 Comparison of Number of Recovered Cases in Western Europe

7 Comparison of Number of Active Cases in Western Europe

8 About

All the graphs above are generated from the data provided by Johns Hopkins CSSE (provided to the public strictly for educational and academic research purposes).

The source code for generating the graphs is available under MIT License at https://github.com/philippe-docourt/COVID-19/blob/master/covid_19_western_europe.Rmd.

The data are provided as 2019 Novel Coronavirus COVID-19 (2019-nCoV) Data Repository by Johns Hopkins CSSE (see https://github.com/CSSEGISandData/COVID-19).

See https://github.com/philippe-docourt/COVID-19/blob/master/README.md for more details.

8.1 Data Sources

8.2 Terms of Use

LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICBmaWdfaGVpZ2h0OiA1CiAgICBmaWdfd2lkdGg6IDcKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6IAogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDogZGVmYXVsdApkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWSAtICVIOiVNJylgIgphdXRob3I6ICJQaGlsaXBwZSBEb2NvdXJ0IgotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCgpnZXRfdGltZXNlcmllc19hc192ZWN0b3IgPC0gZnVuY3Rpb24oZGYpIHsKICB0bXAgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYygxOjQpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZSh0bXApKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9CgpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5IDwtIGZ1bmN0aW9uKGNvdW50cnkuY29uZmlybWVkLCBjb3VudHJ5LmRlYXRocywgY291bnRyeS5yZWNvdmVyZWQ9TlVMTCwgY291bnRyeS5wb3B1bGF0aW9uPU5BLCBjb3VudHJ5Lm5hbWU9IiIsIHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0PU5BLCBjb25maW5lbWVudC5hdD1OQSwgdHJlbmQuYW5nbGU9MjApIHsKICBkYXkuY291bnQgPC0gbnJvdyhjb3VudHJ5LmNvbmZpcm1lZCkKICAKICB5bGltIDwtIGMoMCwgMS4zNSAqIG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSkKICBkYXkuc3RhcnQgPC0gbWluKGMoNDUsIHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb25maW5lbWVudC5hdCksIG5hLnJtID0gVFJVRSkKICBwbG90KGNvdW50cnkuY29uZmlybWVkLCBtYWluPSBwYXN0ZSgiQ2FzZXMgaW4iLCBjb3VudHJ5Lm5hbWUpLCB0eXBlID0gIm8iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiQ3VtdWxhdGVkIE51bWJlciBvZiBDb25maXJtZWQgQ2FzZXMiLCBjb2wgPSAicmVkIiwgeGxpbSA9ICBjKGRheS5zdGFydCwgZGF5LmNvdW50ICsgMTUpLCB5bGltID0geWxpbSkKICBsaW5lcyhzZXEoMSwgbGVuZ3RoKGNvdW50cnkuZGVhdGhzKSksIGNvdW50cnkuZGVhdGhzLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBsdHkgPSAxLCBsdyA9IDEpCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LnJlY292ZXJlZCkpLCBjb3VudHJ5LnJlY292ZXJlZCwgdHlwZSA9ICJsIiwgY29sID0gImdyZWVuIiwgbHR5ID0gMSwgbHcgPSAxKQogIGdyaWQoKQogIAogICMgVHJlbmQgYmFzZWQgb24gbGFzdCB0d28gb2JzZXJ2YXRpb25zIChsYXN0IGRheSkuCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDIpCiAgZHkgPC1sYXN0LmNvbmZpcm1lZFsyXSAtIGxhc3QuY29uZmlybWVkWzFdCiAgc2xvcGUgPC0gZHkKICB1IDwtIGMoMSwgZHkpCiAgYSA8LSBsYXN0LmNvbmZpcm1lZFsxXSAtIChkYXkuY291bnQgLSAxKSAqIHNsb3BlCiAgYWJsaW5lKGEgPSBhLCBiID0gc2xvcGUsIGNvbCA9ICJ2aW9sZXQiLCBsdyA9IDEuNSwgbHR5ID0gNCkKICBsYXN0LnByb2dyZXNzaW9uLnBjdCA8LSByb3VuZCgoMTAwICogZHkpIC8gbGFzdC5jb25maXJtZWRbMV0pCiAgdGV4dCh4ID0gZGF5LmNvdW50IC0gKDI1ICsgdHJlbmQuYW5nbGUgLyAxMCksIHkgPSAwLjY3ICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy9kYXlcbkV4dHJhcG9sYXRpb246IiwgZHkgKiA3LCAiY2FzZS93LlxuIiwgbGFzdC5wcm9ncmVzc2lvbi5wY3QsICIlIHByb2dyZXNzIGxhc3QgZGF5IiksIHNydCA9IHRyZW5kLmFuZ2xlLCBjb2wgPSAidmlvbGV0IikKICAKICAjIFRyZW5kIGJhc2VkIG9uIGxhc3QgOCBvYnNlcnZhdGlvbnMgKDcgaW50ZXJ2YWxzLCBvbmUgd2VlaykKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gOCkKICBkeSA8LWxhc3QuY29uZmlybWVkWzhdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeSAvIDcKICB1IDwtIGMoNywgZHkpCiAgYSA8LSBsYXN0LmNvbmZpcm1lZFsxXSAtIChkYXkuY291bnQgLSA3KSAqIHNsb3BlCiAgYWJsaW5lKGEgPSBhLCBiID0gc2xvcGUsIGNvbCA9ICJibGFjayIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgKyA2IC0gKHRyZW5kLmFuZ2xlIC8gMjApLCB5ID0gKDAuNCAtICh0cmVuZC5hbmdsZS8zMDAwKSkgKiB5bGltWzJdLCBwYXN0ZShkeSwgImNhc2VzL3cuXG5Bdmc6IiwgZHkgJS8lIDcsICJjYXNlL2RheVxuIiwgbGFzdC5wcm9ncmVzc2lvbi5wY3QsICIlIHByb2dyZXNzIGxhc3Qgd2VlayIpLCBzcnQgPSB0cmVuZC5hbmdsZSwgY29sID0gImJsYWNrIikKCiAgIyBTaG93IHNwZWNpYWwgbWVhc3VyZXMgYWdhaW5zdCBwcm9wYWdhdGlvbi4KICB5cG9zID0gbWF4KGNvdW50cnkuY29uZmlybWVkLCBuYS5ybSA9IFRSVUUpICUvJSAzCiAgaWYgKCFpcy5uYShwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdCkpIHsKICAgIGFibGluZSh2ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQsIGNvbCA9ICJibHVlIiwgbHcgPSAxLCBsdHkgPSA1KQogICAgdGV4dCh4ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQgLSA1LCB5ID0geXBvcywgIkFsbCBwdWJsaWMgc3BhY2VzIGFyZSBjbG9zZWQiLCBjb2wgPSAiYmx1ZSIsIHNydCA9IDkwKQogIH0KICBpZiAoIWlzLm5hKGNvbmZpbmVtZW50LmF0KSkgewogICAgYWJsaW5lKHYgPSBjb25maW5lbWVudC5hdCwgY29sID0gInJlZCIsIGx3ID0gMSwgbHR5ID0gNSkKICAgIHRleHQoeCA9IGNvbmZpbmVtZW50LmF0IC0gNSwgeSA9IHlwb3MsICJQb3B1bGF0aW9uIGlzIGNvbmZpbmVkIiwgY29sID0gInJlZCIsIHNydCA9IDkwKQogIH0KICAKICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKCJDb25maXJtZWQiLCAiRGVhdGhzIiwgIlJlY292ZXJlZCIsICJDb25maXJtZWQgdHJlbmQgYmFzZWQgb24gbGFzdCBkYXkiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3Qgd2VlayIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAiZ3JlZW4iLCAidmlvbGV0IiwgImJsYWNrIiksIGx0eSA9IGMocmVwKDEsIDMpLCAyLCAzKSwgbHcgPSBjKHJlcCgxLCAzKSwgMS41LCAxLjUpKQogIAogIGlmKCFpcy5uYShjb3VudHJ5LnBvcHVsYXRpb24pKSB7CiAgICBwcm9wb3J0aW9uIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQvKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDApKQogICAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgcHJvcG9ydGlvbiwgdHlwZSA9ICJoIiwgY29sID0gImN5YW4iLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgbWFpbiA9IHBhc3RlKCJOZXcgQ29uZmlybWVkIENhc2VzIHBlciBEYXkgcGVyIDEwMEsgUGVyc29ucyIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSBwZXIgMTAwSyBQLiIsIGx3ZCA9IDIpCiAgICBncmlkKCkKICAgIGluY2lkZW5jZS5sYXN0LndlZWsgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbj04KQogICAgaW5jaWRlbmNlLmxhc3Qud2VlayA8LSByb3VuZCgoaW5jaWRlbmNlLmxhc3Qud2Vla1s4XSAtIGluY2lkZW5jZS5sYXN0LndlZWtbMV0pIC8gKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDApKQogICAgaW5jaWRlbmNlLmxhc3QudHdvd2Vla3MgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbj0xNSkKICAgIGluY2lkZW5jZS5sYXN0LnR3b3dlZWtzIDwtIHJvdW5kKChpbmNpZGVuY2UubGFzdC50d293ZWVrc1sxNV0gLSBpbmNpZGVuY2UubGFzdC50d293ZWVrc1sxXSkgLyAoY291bnRyeS5wb3B1bGF0aW9uLzEwMDAwMCkpCiAgICBpbmNpZGVuY2UubGFzdC50aHJlZXdlZWtzIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG49MjIpCiAgICBpbmNpZGVuY2UubGFzdC50aHJlZXdlZWtzIDwtIHJvdW5kKChpbmNpZGVuY2UubGFzdC50aHJlZXdlZWtzWzIyXSAtIGluY2lkZW5jZS5sYXN0LnRocmVld2Vla3NbMV0pIC8gKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDApKQogICAgaW5jaWRlbmNlLmxhc3QuZm91cndlZWtzIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG49MjkpCiAgICBpbmNpZGVuY2UubGFzdC5mb3Vyd2Vla3MgPC0gcm91bmQoKGluY2lkZW5jZS5sYXN0LmZvdXJ3ZWVrc1syOV0gLSBpbmNpZGVuY2UubGFzdC5mb3Vyd2Vla3NbMV0pIC8gKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDApKQogICAgZXZvbHV0aW9uLm9mLmluY2lkZW5jZSA8LSBwYXN0ZSgiRXZvbHV0aW9uIG9mIG5ldyBjb25maXJtZWQgY2FzZXMgcGVyIDEwMEsgcGVyc29ucyBvdmVyIHRpbWU6XG5cbkxhc3Qgd2VlazoiLCBpbmNpZGVuY2UubGFzdC53ZWVrLCAiXG5MYXN0IHR3byB3ZWVrczoiLCBpbmNpZGVuY2UubGFzdC50d293ZWVrcywgIlxuTGFzdCB0aHJlZSB3ZWVrczoiLCBpbmNpZGVuY2UubGFzdC50aHJlZXdlZWtzLCAiXG5MYXN0IGZvdXIgd2Vla3M6IiwgaW5jaWRlbmNlLmxhc3QuZm91cndlZWtzKQogICAgdGV4dCh4ID0gZGF5LnN0YXJ0ICsgMC41ICogKGRheS5jb3VudCAtIGRheS5zdGFydCksIHkgPSBtYXgocHJvcG9ydGlvbikgKiAwLjcsIGV2b2x1dGlvbi5vZi5pbmNpZGVuY2UpCiAgfQogIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQpCiAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgZGlmZnMsIHR5cGUgPSAiaCIsIGNvbCA9ICJjeWFuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBDYXNlcyBwZXIgRGF5IiwgbHdkID0gMikKICBncmlkKCkKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gOSkKICB3ZWVrbHkucHJvZ3Jlc3MucmF0aW8gPC0gcm91bmQoKGxhc3QuY29uZmlybWVkWzldICsgbGFzdC5jb25maXJtZWRbOF0pIC8gKGxhc3QuY29uZmlybWVkWzJdICsgbGFzdC5jb25maXJtZWRbMV0pLCBkaWdpdHMgPSAyKQogIGxhc3QuY29uZmlybWVkIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG4gPSAxNikKICB0d293ZWVrcy5wcm9ncmVzcy5yYXRpbyA8LSByb3VuZCgobGFzdC5jb25maXJtZWRbMTZdICsgbGFzdC5jb25maXJtZWRbMTVdKSAvIChsYXN0LmNvbmZpcm1lZFsyXSArIGxhc3QuY29uZmlybWVkWzFdKSwgZGlnaXRzID0gMikKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMjMpCiAgdGhyZWV3ZWVrcy5wcm9ncmVzcy5yYXRpbyA8LSByb3VuZCgobGFzdC5jb25maXJtZWRbMjNdICsgbGFzdC5jb25maXJtZWRbMjJdKSAvIChsYXN0LmNvbmZpcm1lZFsyXSArIGxhc3QuY29uZmlybWVkWzFdKSwgZGlnaXRzID0gMikKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMzApCiAgbW9udGhseS5wcm9ncmVzcy5yYXRpbyA8LSByb3VuZCgobGFzdC5jb25maXJtZWRbMzBdICsgbGFzdC5jb25maXJtZWRbMjldKSAvIChsYXN0LmNvbmZpcm1lZFsyXSArIGxhc3QuY29uZmlybWVkWzFdKSwgZGlnaXRzID0gMikKICB0ZXh0KHggPSBkYXkuc3RhcnQgKyAwLjUgKiAoZGF5LmNvdW50IC0gZGF5LnN0YXJ0KSwgeSA9IG1heChkaWZmcykqMC44LCBwYXN0ZSgiUHJvZ3Jlc3Npb24gb2YgbmV3IGNvbmZpcm1lZCBjYXNlcyBwZXIgZGF5OlxuXG5MYXN0IHdlZWs6IHggIiwgd2Vla2x5LnByb2dyZXNzLnJhdGlvLCAiICgiLCByb3VuZCgoKHR3b3dlZWtzLnByb2dyZXNzLnJhdGlvL3dlZWtseS5wcm9ncmVzcy5yYXRpbyktMSkqMTAwLCAxKSwgICIlIGNvbXBhcmVkIHRvIHByZXYuIHdlZWspXG5MYXN0IDIgd2Vla3M6IHggIiwgdHdvd2Vla3MucHJvZ3Jlc3MucmF0aW8sICIgKCIsIHJvdW5kKCgodGhyZWV3ZWVrcy5wcm9ncmVzcy5yYXRpby90d293ZWVrcy5wcm9ncmVzcy5yYXRpbyktMSkqMTAwLCAxKSwgICIlIGNvbXBhcmVkIHRvIHByZXYuIHdlZWspXG5MYXN0IDMgd2Vla3M6IHggIiwgdGhyZWV3ZWVrcy5wcm9ncmVzcy5yYXRpbywgIiAoIiwgcm91bmQoKChtb250aGx5LnByb2dyZXNzLnJhdGlvL3RocmVld2Vla3MucHJvZ3Jlc3MucmF0aW8tMSkqMTAwKSwgMSksICAiJSBjb21wYXJlZCB0byBwcmV2LiB3ZWVrKVxuTGFzdCA0IHdlZWtzOiB4ICIsIG1vbnRobHkucHJvZ3Jlc3MucmF0aW8sIHNlcD0iIiksIGNvbCA9ICJibGFjayIpCiAgCiAgaWYoIWlzLm5hKGNvdW50cnkucG9wdWxhdGlvbikpIHsKICAgIHByb3BvcnRpb24gPC0gZGlmZihjb3VudHJ5LmRlYXRocy8oY291bnRyeS5wb3B1bGF0aW9uLzEwMDAwMDApKQogICAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgcHJvcG9ydGlvbiwgdHlwZSA9ICJoIiwgY29sID0gImJsYWNrIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IERlYXRocyBwZXIgRGF5IHBlciAxIE1pbGxpb24gUGVyc29ucyIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgRGVhdGhzIHBlciBEYXkgcGVyIDFNIFAuIiwgbHdkID0gMikKICAgIGdyaWQoKQogIH0KICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuZGVhdGhzKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiYmxhY2siLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgbWFpbiA9IHBhc3RlKCJOZXcgRGVhdGhzIHBlciBEYXkiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IERlYXRocyBwZXIgRGF5IiwgbHdkID0gMikKICBncmlkKCkKICAKICBpZiAoIWlzLm51bGwoY291bnRyeS5yZWNvdmVyZWQpKSB7CiAgICBkaWZmcyA8LSBkaWZmKGNvdW50cnkucmVjb3ZlcmVkKQogICAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgZGlmZnMsIHR5cGUgPSAiaCIsIGNvbCA9ICJncmVlbiIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCAgbWFpbiA9IHBhc3RlKCJOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkgaW4iLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IFJlY292ZXJlZCBDYXNlcyBwZXIgRGF5IiwgbHdkID0gMikKICAgIGdyaWQoKQogICAgCiAgICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkIC0gKGNvdW50cnkuZGVhdGhzICsgY291bnRyeS5yZWNvdmVyZWQpKQogICAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgZGlmZnMsIHR5cGUgPSAiaCIsIGNvbCA9ICJyZWQiLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgbWFpbiA9IHBhc3RlKCJOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IiwgbHdkID0gMikKICAgIGdyaWQoKQogIH0KfQoKY292aWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX2dsb2JhbC5jc3YiKQpjb3ZpZC5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX2dsb2JhbC5jc3YiKQpjb3ZpZC5yZWNvdmVyZWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfcmVjb3ZlcmVkX2dsb2JhbC5jc3YiKQoKY291bnRyeS5uYW1lcyA8LSBjKCJTd2l0emVybGFuZCIsICJJdGFseSIsICJGcmFuY2UiLCAiR2VybWFueSIsICJBdXN0cmlhIiAsICJTcGFpbiIsICJHcmVhdCBCcml0YWluIiwgIkRlbm1hcmsiLCAiTm9yd2F5IiwgIlN3ZWRlbiIsICJGaW5sYW5kIiwgIkljZWxhbmQiLCAiQmVsZ2l1bSIpCmNvdW50cnkuY291bnQgPC0gbGVuZ3RoKGNvdW50cnkubmFtZXMpCmNvbCA8LSByYWluYm93KGNvdW50cnkuY291bnQpCmx0eSA8LSBzZXEoMSwgY291bnRyeS5jb3VudCkKcGNoIDwtIHNlcSgxMCwgMTAgKyBjb3VudHJ5LmNvdW50KQoKc3dpdHplcmxhbmQuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQpzd2l0emVybGFuZC5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQpzd2l0emVybGFuZC5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQpzd2l0emVybGFuZC5wb3B1bGF0aW9uIDwtIDg1NzAwMDAKCml0YWx5LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKaXRhbHkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKaXRhbHkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKaXRhbHkucG9wdWxhdGlvbiA8LSA2MDM2MDAwMAoKZnJhbmNlLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZnJhbmNlLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmZyYW5jZS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpmcmFuY2UucG9wdWxhdGlvbiA8LSA2Njk5MDAwMAoKZ2VybWFueS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKZ2VybWFueS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCmdlcm1hbnkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQpnZXJtYW55LnBvcHVsYXRpb24gPC0gODMwMjAwMDAKCmF1c3RyaWEuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCmF1c3RyaWEuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQphdXN0cmlhLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKYXVzdHJpYS5wb3B1bGF0aW9uIDwtIDg4NTkwMDAKCnNwYWluLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKc3BhaW4uZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKc3BhaW4ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKc3BhaW4ucG9wdWxhdGlvbiA8LSA0Njk0MDAwMAoKdWsuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCnVrLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKdWsucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQp1ay5wb3B1bGF0aW9uIDwtIDY2NjUwMDAwCgpkZW5tYXJrLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsucG9wdWxhdGlvbiA8LSA1ODA2MDAwCgpub3J3YXkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5wb3B1bGF0aW9uIDwtIDU0MzMwMDAKCnN3ZWRlbi5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQpzd2VkZW4uZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCnN3ZWRlbi5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKc3dlZGVuLnBvcHVsYXRpb24gPC0gMTAyMzAwMDAKCmZpbmxhbmQuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJGaW5sYW5kIikpCmZpbmxhbmQuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRmlubGFuZCIpKQpmaW5sYW5kLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkZpbmxhbmQiKSkKZmlubGFuZC5wb3B1bGF0aW9uIDwtIDU1MjI4NTAKCmljZWxhbmQuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCmljZWxhbmQuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQppY2VsYW5kLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKaWNlbGFuZC5wb3B1bGF0aW9uIDwtIDM2NDEzNAoKYmVsZ2l1bS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkJlbGdpdW0iKSkKYmVsZ2l1bS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJCZWxnaXVtIikpCmJlbGdpdW0ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQmVsZ2l1bSIpKQpiZWxnaXVtLnBvcHVsYXRpb24gPC0gMTE0OTI2NDEKCmNvdW50cmllcy5jb25maXJtZWQgPC0gbGlzdChzd2l0emVybGFuZC5jb25maXJtZWQsIGl0YWx5LmNvbmZpcm1lZCwgZnJhbmNlLmNvbmZpcm1lZCwgZ2VybWFueS5jb25maXJtZWQsIGF1c3RyaWEuY29uZmlybWVkLCBzcGFpbi5jb25maXJtZWQsIHVrLmNvbmZpcm1lZCwgZGVubWFyay5jb25maXJtZWQsIG5vcndheS5jb25maXJtZWQsIHN3ZWRlbi5jb25maXJtZWQsIGZpbmxhbmQuY29uZmlybWVkLCBpY2VsYW5kLmNvbmZpcm1lZCwgYmVsZ2l1bS5jb25maXJtZWQpCmNvdW50cmllcy5kZWF0aHMgPC0gbGlzdChzd2l0emVybGFuZC5kZWF0aHMsIGl0YWx5LmRlYXRocywgZnJhbmNlLmRlYXRocywgZ2VybWFueS5kZWF0aHMsIGF1c3RyaWEuZGVhdGhzLCBzcGFpbi5kZWF0aHMsIHVrLmRlYXRocywgZGVubWFyay5kZWF0aHMsIG5vcndheS5kZWF0aHMsIHN3ZWRlbi5kZWF0aHMsIGZpbmxhbmQuZGVhdGhzLCBpY2VsYW5kLmRlYXRocywgYmVsZ2l1bS5kZWF0aHMpCmNvdW50cmllcy5yZWNvdmVyZWQgPC0gbGlzdChzd2l0emVybGFuZC5yZWNvdmVyZWQsIGl0YWx5LnJlY292ZXJlZCwgZnJhbmNlLnJlY292ZXJlZCwgZ2VybWFueS5yZWNvdmVyZWQsIGF1c3RyaWEucmVjb3ZlcmVkLCBzcGFpbi5yZWNvdmVyZWQsIHVrLnJlY292ZXJlZCwgZGVubWFyay5yZWNvdmVyZWQsIG5vcndheS5yZWNvdmVyZWQsIHN3ZWRlbi5yZWNvdmVyZWQsIGZpbmxhbmQucmVjb3ZlcmVkLCBpY2VsYW5kLnJlY292ZXJlZCwgYmVsZ2l1bS5yZWNvdmVyZWQpCmNvdW50cmllcy5wb3B1bGF0aW9uIDwtIGxpc3Qoc3dpdHplcmxhbmQucG9wdWxhdGlvbiwgaXRhbHkucG9wdWxhdGlvbiwgZnJhbmNlLnBvcHVsYXRpb24sIGdlcm1hbnkucG9wdWxhdGlvbiwgYXVzdHJpYS5wb3B1bGF0aW9uLCBzcGFpbi5wb3B1bGF0aW9uLCB1ay5wb3B1bGF0aW9uLCBkZW5tYXJrLnBvcHVsYXRpb24sIG5vcndheS5wb3B1bGF0aW9uLCBzd2VkZW4ucG9wdWxhdGlvbiwgZmlubGFuZC5wb3B1bGF0aW9uLCBpY2VsYW5kLnBvcHVsYXRpb24sIGJlbGdpdW0ucG9wdWxhdGlvbikKCmRheS5jb3VudCA8LSBOUk9XKHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCkKYGBgCgojIEV2b2x1dGlvbiBpbiBTd2l0emVybGFuZCBhbmQgV2VzdGVybiBFdXJvcGUKClRoZSBmaWd1cmVzIGRvIG5vdCByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcgaW4gZWFjaCBjb3VudHJ5LCBkZXBlbmRpbmcgb24gdGhlIGV4dGVudCBvZiB0aGUgc2NyZWVuaW5nIHRlc3RzIGNhcnJpZWQgb3V0LiBSZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbSwgdGhlIHdlZWtseSBhbmQgZGFpbHkgdHJlbmQgY3VydmVzIGFsbG93IHlvdSB0byBnZXQgYW4gaWRlYSBvZiB0aGUgZm9yZXNlZWFibGUgZXZvbHV0aW9uIGZvciB0aGUgbmV4dCBkYXlzIChhc3N1bWluZyB0aGF0IHRoZSBzY3JlZW5pbmcgc3RyYXRlZ3kgZG9lcyBub3QgY2hhbmdlIG92ZXIgdGltZSkuIFJlc3BlY3RpdmVseSwgaXQgcHJvdmlkZXMgYW4gaW5kaWNhdGlvbiBvZiBhIHBvc3NpYmxlIGluZmxlY3Rpb24gb2YgdGhlIHByb2dyZXNzaW9uIG9mIHRoZSBlcGlkZW1pYyBpbiB0aGUgbmVhciBmdXR1cmUuCgpJTVBPUlRBTlQgTk9URTogVGhlIGdyYXBoaWNzIGJlbG93IHNob3cgdmFsdWVzIHByb3ZpZGVkIGJ5IG9mZmljaWFsIHNvdXJjZXMgYmV0d2VlbiAwIGFuZCA0OGggYmVmb3JlIHRoZSBsYXN0IHVwZGF0ZSBvZiB0aGlzIGRvY3VtZW50LiBBcyBhbiBleGVtcGxlLCBmb3IgU3dpdHplcmxhbmQsIHlvdSdsbCBzZWUgdGhlIHZhbHVlcyB1cCB0byBPY3RvYmVyIDIyIGF0IDEyQU0sIGV2ZW4gdGhvdWdoIHRoZSBnYXBoaWNzIHdlcmUgdXBkYXRlIG9uIE9jdG9iZXIgMjQgYXQgMUFNISBUaGlzIGlzIGR1ZSB0byB0aGUgbGFnIGJldHdlZW4gdGhlIHRpbWUgc2xvdCBmb3IgY29tbXVuaWNhdGluZyBvZmZpY2lhbCBmaWd1cmVzIGFuZCB0aGUgdGltZSBzbG90IHVzZWQgYnkgSm9obnMgSG9wa2lucyBDU1NFIGZvciByZWxlYXNpbmcgaW4gdGhlaXIgR2l0IHJlcG9zaXRvcnkgdGhlIGFnZ3JlZ2F0ZWQgZmlndXJlcyBmb3IgYWxsIG9mZmljaWFsIHNvdXJjZXMuCgojIyBTd2l0emVybGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzd2l0emVybGFuZC5jb25maXJtZWQsIHN3aXR6ZXJsYW5kLmRlYXRocywgc3dpdHplcmxhbmQucmVjb3ZlcmVkLCBzd2l0emVybGFuZC5wb3B1bGF0aW9uLCAiU3dpdHplcmxhbmQiLCA1NSwgTkEsIHRyZW5kLmFuZ2xlID0gNzUpCmBgYAoKIyMgSXRhbHkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoaXRhbHkuY29uZmlybWVkLCBpdGFseS5kZWF0aHMsIGl0YWx5LnJlY292ZXJlZCwgaXRhbHkucG9wdWxhdGlvbiwgIkl0YWx5IiwgTkEsIHRyZW5kLmFuZ2xlID0gNzUpCmBgYAoKIyMgRnJhbmNlCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuZGVhdGhzLCBmcmFuY2UucmVjb3ZlcmVkLCBmcmFuY2UucG9wdWxhdGlvbiwgIkZyYW5jZSIsIDUzLCA1NiwgdHJlbmQuYW5nbGUgPSA3MCkKYGBgCgojIyBHZXJtYW55CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGdlcm1hbnkuY29uZmlybWVkLCBzd2l0emVybGFuZC5kZWF0aHMsIGdlcm1hbnkucmVjb3ZlcmVkLCBnZXJtYW55LnBvcHVsYXRpb24sICJHZXJtYW55IiwgNDgsIE5BLCB0cmVuZC5hbmdsZSA9IDcwKQpgYGAKCiMjIEF1c3RyaWEKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoYXVzdHJpYS5jb25maXJtZWQsIGF1c3RyaWEuZGVhdGhzLCBhdXN0cmlhLnJlY292ZXJlZCwgYXVzdHJpYS5wb3B1bGF0aW9uLCAiQXVzdHJpYSIsIDUyLCBOQSwgdHJlbmQuYW5nbGUgPSA3NSkKYGBgCgojIyBTcGFpbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzcGFpbi5jb25maXJtZWQsIHNwYWluLmRlYXRocywgc3BhaW4ucmVjb3ZlcmVkLCBzcGFpbi5wb3B1bGF0aW9uLCAiU3BhaW4iLCBOQSwgNTMsIHRyZW5kLmFuZ2xlID0gNjUpCmBgYAoKIyMgR3JlYXQgQnJpdGFpbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1ay5jb25maXJtZWQsIHVrLmRlYXRocywgdWsucmVjb3ZlcmVkLCB1ay5wb3B1bGF0aW9uLCAiR3JlYXQgQnJpdGFpbiIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSA2NSkKYGBgCgojIyBEZW5tYXJrCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGRlbm1hcmsuY29uZmlybWVkLCBkZW5tYXJrLmRlYXRocywgZGVubWFyay5yZWNvdmVyZWQsIGRlbm1hcmsucG9wdWxhdGlvbiwgIkRlbm1hcmsiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNjUpCmBgYAoKIyMgTm9yd2F5CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KG5vcndheS5jb25maXJtZWQsIG5vcndheS5kZWF0aHMsIG5vcndheS5yZWNvdmVyZWQsIG5vcndheS5wb3B1bGF0aW9uLCAiTm9yd2F5IiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDY1KQpgYGAKCiMjIFN3ZWRlbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzd2VkZW4uY29uZmlybWVkLCBzd2VkZW4uZGVhdGhzLCBzd2VkZW4ucmVjb3ZlcmVkLCBzd2VkZW4ucG9wdWxhdGlvbiwgIlN3ZWRlbiIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSA2MCkKYGBgCgojIyBGaW5sYW5kCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGZpbmxhbmQuY29uZmlybWVkLCBmaW5sYW5kLmRlYXRocywgZmlubGFuZC5yZWNvdmVyZWQsIGZpbmxhbmQucG9wdWxhdGlvbiwgIkZpbmxhbmQiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNSkKYGBgCgojIyBJY2VsYW5kCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGljZWxhbmQuY29uZmlybWVkLCBpY2VsYW5kLmRlYXRocywgaWNlbGFuZC5yZWNvdmVyZWQsIGljZWxhbmQucG9wdWxhdGlvbiwgIkljZWxhbmQiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNzApCmBgYAoKIyMgQmVsZ2l1bQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShiZWxnaXVtLmNvbmZpcm1lZCwgYmVsZ2l1bS5kZWF0aHMsIGJlbGdpdW0ucmVjb3ZlcmVkLCBiZWxnaXVtLnBvcHVsYXRpb24sICJCZWxnaXVtIiwgNTUsIE5BLCB0cmVuZC5hbmdsZSA9IDc1KQpgYGAKCiMgV2hhdCBIYXBwZW5lZCBpbiBIdWJlaSBQcm92aW5jZSAoQ2hpbmEpCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KaHViZWkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKaHViZWkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQoKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShodWJlaS5jb25maXJtZWQsIGh1YmVpLmRlYXRocywgaHViZWkucmVjb3ZlcmVkLCBOQSwgIkh1YmVpIFByb3ZpbmNlLCBDaGluYSIsIE5BLCAyLCB0cmVuZC5hbmdsZSA9IDApCmBgYAoKIyBXaGF0IElzIEhhcHBlbmluZyBpbiBVU0EKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EgPC0gZnVuY3Rpb24oZGYsIGV4bHVkZSkgewogIHRtcCA8LSBjb2xTdW1zKHN1YnNldChkZiwgc2VsZWN0ID0gLWV4bHVkZSkpCiAgdG1wIDwtIHNhcHBseShhcy52ZWN0b3IodHJhbnNwb3NlKGFzLmxpc3QodG1wKSkpLCBhcy5pbnRlZ2VyKQogIHJldHVybih0bXApCn0KCmNvdmlkLnVzIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2NvbmZpcm1lZF9VUy5jc3YiKQpjb3ZpZC51cy5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX1VTLmNzdiIpCgp1c2EuY29uZmlybWVkIDwtIHN1YnNldChjb3ZpZC51cywgaXNvMyA9PSAiVVNBIikKdXNhLmRlYXRocyA8LSBzdWJzZXQoY292aWQudXMuZGVhdGhzLCBpc28zID09ICJVU0EiKQoKdXNhLmNvbmZpcm1lZCA8LSBnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EodXNhLmNvbmZpcm1lZCwgYygxOjExKSkKdXNhLmRlYXRocyA8LSBnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EodXNhLmRlYXRocywgYygxOjEyKSkKCnVzYS5wb3B1bGF0aW9uIDwtIDMzMDA1Mjk2MApwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KHVzYS5jb25maXJtZWQsIHVzYS5kZWF0aHMsIGNvdW50cnkucmVjb3ZlcmVkID0gTlVMTCwgdXNhLnBvcHVsYXRpb24sICJVU0EiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlPTUwKQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQ29uZmlybWVkIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoMzUsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkNvbmZpcm1lZCBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDEsIGRheS5jb3VudCksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSAyLCBwY2ggPSAyMCwgbHcgPSAwLjUpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMiwgcGNoID0gMjAsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCswLjIpCnlyYW5nZSA8LSBjKDAsIG1heC55ICogMS44KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIpCgpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNjkgKiBpLCBkaWZmKGNvdW50cmllcy5jb25maXJtZWRbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSAzKQp9CgpwbG90KHhyYW5nZSwgeXJhbmdlLzMwMCwgbWFpbj0gIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSBwZXIgMTAwSyBQZXJzb25zIChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSBwZXIgMTAwSyBQLiIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSA0LCBjZXggPSAwLjkpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA2OSAqIGksIGRpZmYoY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKS8oY291bnRyaWVzLnBvcHVsYXRpb25bW2ldXVsxXS8xMDAwMDApLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gMykKfQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgRGVhdGhzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoNDAsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5kZWF0aHNbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkRlYXRocyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgRGVhdGhzIikKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMiwgcGNoID0gMjAsIHRpdGxlID0gIkNvdW50cnkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDEsIGRheS5jb3VudCksIGNvdW50cmllcy5kZWF0aHNbW2ldXSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSAyLCBwY2ggPSAyMCwgbHcgPSAxKQp9CgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5kZWF0aHNbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KzAuMikKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAxLjMpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgRGVhdGhzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSA0LCBjZXggPSAwLjkpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA2OSAqIGksIGRpZmYoY291bnRyaWVzLmRlYXRoc1tbaV1dKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDMpCn0KCnBsb3QoeHJhbmdlLCB5cmFuZ2UvNywgbWFpbj0gIk5ldyBEZWF0aHMgcGVyIERheSBwZXIgMTAwSyBQZXJzb25zIChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgRGVhdGhzIHBlciBEYXkgcGVyIDEwMEsgUC4iKQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNjkgKiBpLCBkaWZmKGNvdW50cmllcy5jb25maXJtZWRbW2ldXSkvKGNvdW50cmllcy5wb3B1bGF0aW9uW1tpXV1bMV0vMTAwMDAwKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDMpCn0KYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIFJlY292ZXJlZCBDYXNlcyBpbiBXZXN0ZXJuIEV1cm9wZQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoNTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJSZWNvdmVyZWQgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMiwgcGNoID0gMjAsIHRpdGxlID0gIkNvdW50cnkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgZCA8LSBucm93KGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSkKICBsaW5lcyhzZXEoMSwgZCksIGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSAyLCBwY2ggPSAyMCwgbHcgPSAxKQp9CgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KzAuMikKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAxLjMpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSA0LCBjZXggPSAwLjkpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA2OSAqIGksIGRpZmYoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDMpCn0KYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIEFjdGl2ZSBDYXNlcyBpbiBXZXN0ZXJuIEV1cm9wZQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgeSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkFjdGl2ZSBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAyLCBwY2ggPSAyMCwgdGl0bGUgPSAiQ291bnRyeSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICB5IDwtIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSAtIChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0gKyBjb3VudHJpZXMuZGVhdGhzW1tpXV0pCiAgbGluZXMoc2VxKDEsIGQpLCB5LCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDIsIHBjaCA9IDIwLCBsdyA9IDEpCn0KCm1pbi55IDwtIDAKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIHkgPC0gdGFpbCh5LCAxMCkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKICBtaW4ueSA8LSBtaW4oYyhtaW4ueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCswLjIpCnlyYW5nZSA8LSBjKG1pbi55LCBtYXgueSAqIDEuMykKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IikKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA2OSAqIGksIGRpZmYoeSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSAzKQp9CmBgYAoKIyBBYm91dAoKQWxsIHRoZSBncmFwaHMgYWJvdmUgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IEpvaG5zIEhvcGtpbnMgQ1NTRSAocHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBzdHJpY3RseSBmb3IgZWR1Y2F0aW9uYWwgYW5kIGFjYWRlbWljIHJlc2VhcmNoIHB1cnBvc2VzKS4KClRoZSBzb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyB0aGUgZ3JhcGhzIGlzIGF2YWlsYWJsZSB1bmRlciBNSVQgTGljZW5zZSBhdCBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwcGUtZG9jb3VydC9DT1ZJRC0xOS9ibG9iL21hc3Rlci9jb3ZpZF8xOV93ZXN0ZXJuX2V1cm9wZS5SbWQuCgpUaGUgZGF0YSBhcmUgcHJvdmlkZWQgYXMgKjIwMTkgTm92ZWwgQ29yb25hdmlydXMgQ09WSUQtMTkgKDIwMTktbkNvVikgRGF0YSBSZXBvc2l0b3J5IGJ5IEpvaG5zIEhvcGtpbnMgQ1NTRSogKHNlZSBodHRwczovL2dpdGh1Yi5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkpLgoKU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZCBmb3IgbW9yZSBkZXRhaWxzLgoKIyMgRGF0YSBTb3VyY2VzCgoqIEFnZ3JlZ2F0ZWQgZGF0YSBzb3VyY2VzOgogICogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKTogaHR0cHM6Ly93d3cud2hvLmludC8KICAqIEV1cm9wZWFuIENlbnRyZSBmb3IgRGlzZWFzZSBQcmV2ZW50aW9uIGFuZCBDb250cm9sIChFQ0RDKTogaHR0cHM6Ly93d3cuZWNkYy5ldXJvcGEuZXUvZW4vZ2VvZ3JhcGhpY2FsLWRpc3RyaWJ1dGlvbi0yMDE5LW5jb3YtY2FzZXMgCiAgKiBEWFkuY24uIFBuZXVtb25pYS4gMjAyMC4gaHR0cDovLzNnLmR4eS5jbi9uZXdoNS92aWV3L3BuZXVtb25pYQogICogVVMgQ0RDOiBodHRwczovL3d3dy5jZGMuZ292L2Nvcm9uYXZpcnVzLzIwMTktbmNvdi9pbmRleC5odG1sCiAgKiBCTk8gTmV3czogaHR0cHM6Ly9ibm9uZXdzLmNvbS9pbmRleC5waHAvMjAyMC8wMi90aGUtbGF0ZXN0LWNvcm9uYXZpcnVzLWNhc2VzLwogICogV29ybGRvTWV0ZXJzOiBodHRwczovL3d3dy53b3JsZG9tZXRlcnMuaW5mby9jb3JvbmF2aXJ1cy8gIAogICogMVBvaW50M0FyY2VzOiBodHRwczovL2Nvcm9uYXZpcnVzLjFwb2ludDNhY3Jlcy5jb20vZW4gIAogICogQ09WSUQgVHJhY2tpbmcgUHJvamVjdDogaHR0cHM6Ly9jb3ZpZHRyYWNraW5nLmNvbS9kYXRhLiAoVVMgVGVzdGluZyBhbmQgSG9zcGl0YWxpemF0aW9uIERhdGEuIFdlIHVzZSB0aGUgbWF4aW11bSByZXBvcnRlZCB2YWx1ZSBmcm9tICJDdXJyZW50bHkiIGFuZCAiQ3VtdWxhdGl2ZSIgSG9zcGl0YWxpemVkIGZvciBvdXIgaG9zcGl0YWxpemF0aW9uIG51bWJlciByZXBvcnRlZCBmb3IgZWFjaCBzdGF0ZS4pCgoqIFVTIGRhdGEgc291cmNlcyBhdCB0aGUgc3RhdGUgKEFkbWluMSkgb3IgY291bnR5L2NpdHkgKEFkbWluMikgbGV2ZWw6ICAKICAqIFdhc2hpbmd0b24gU3RhdGUgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmRvaC53YS5nb3YvZW1lcmdlbmNpZXMvY29yb25hdmlydXMKICAqIE1hcnlsYW5kIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL2Nvcm9uYXZpcnVzLm1hcnlsYW5kLmdvdi8KICAqIE5ldyBZb3JrIFN0YXRlIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL2hlYWx0aC5kYXRhLm55Lmdvdi9IZWFsdGgvTmV3LVlvcmstU3RhdGUtU3RhdGV3aWRlLUNPVklELTE5LVRlc3RpbmcveGRzcy11NTNlL2RhdGEKICAqIE5ZQyBEZXBhcnRtZW50IG9mIEhlYWx0aCBhbmQgTWVudGFsIEh5Z2llbmU6IGh0dHBzOi8vd3d3MS5ueWMuZ292L3NpdGUvZG9oL2NvdmlkL2NvdmlkLTE5LWRhdGEucGFnZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL255Y2hlYWx0aC9jb3JvbmF2aXJ1cy1kYXRhCiAgKiBGbG9yaWRhIERlcGFydG1lbnQgb2YgSGVhbHRoIERhc2hib2FyZDogaHR0cHM6Ly9zZXJ2aWNlczEuYXJjZ2lzLmNvbS9DWTFMWHhsOXpsSmVCdVJaL2FyY2dpcy9yZXN0L3NlcnZpY2VzL0Zsb3JpZGFfQ09WSUQxOV9DYXNlcy9GZWF0dXJlU2VydmVyLzAKICAgIGFuZCBodHRwczovL2Zkb2gubWFwcy5hcmNnaXMuY29tL2FwcHMvb3BzZGFzaGJvYXJkL2luZGV4Lmh0bWwjLzhkMGRlMzNmMjYwZDQ0NGM4NTJhNjE1ZGM3ODM3Yzg2CiAgKiBDb2xvcmFkbzogaHR0cHM6Ly9jb3ZpZDE5LmNvbG9yYWRvLmdvdi9jb3ZpZC0xOS1kYXRhCiAgKiBWaXJnaW5pYTogaHR0cHM6Ly93d3cudmRoLnZpcmdpbmlhLmdvdi9jb3JvbmF2aXJ1cy8KICAqIE5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyBDTk1JIERlcGFydG1lbnQgb2YgUHVibGljIEhlYWx0aDogaHR0cHM6Ly9jbm1pY2hjYy5tYXBzLmFyY2dpcy5jb20vYXBwcy9vcHNkYXNoYm9hcmQvaW5kZXguaHRtbCMvNDA2MWI2NzRmYzk2NGVmZTg0Zjc3NzRiNzk3OWQyYjUKICAqIE1pc3NvdXJpIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5hcmNnaXMuY29tL2FwcHMvTWFwU2VyaWVzL2luZGV4Lmh0bWw/YXBwaWQ9OGUwMWE1ZDhkOGJkNGI0Zjg1YWRkMDA2ZjllMTRhOWQKICAqIFN0LiBMb3VpcyBDaXR5IERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5zdGxvdWlzLW1vLmdvdi9jb3ZpZC0xOS9kYXRhLyN0b3RhbHNCeURhdGUKICAqIFN0LiBMb3VpcyBDb3VudHk6IGh0dHBzOi8vc3RsY29yb25hLmNvbS9yZXNvdXJjZXMvY292aWQtMTktc3RhdGlzdGljczEvCiAgKiBNYXNzYWNodXNldHRzOiBodHRwczovL3d3dy5tYXNzLmdvdi9pbmZvLWRldGFpbHMvY292aWQtMTktcmVzcG9uc2UtcmVwb3J0aW5nCiAgKiBNaWNoaWdhbjogaHR0cHM6Ly93d3cubWljaGlnYW4uZ292L2Nvcm9uYXZpcnVzLzAsOTc1Myw3LTQwNi05ODE2M185ODE3My0tLSwwMC5odG1sIAogICogSWxsaW5vaXMgRGVwYXJ0bWVudCBvZiBQdWJsaWMgSGVhbHRoOiBodHRwczovL2RwaC5pbGxpbm9pcy5nb3YvY292aWQxOQogICogSW5kaWFuYSBTdGF0ZSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9odWIubXBoLmluLmdvdi9kYXRhc2V0P3E9Q09WSUQKICAqIENvbm5lY3RpY3V0IERlcGFydG1lbnQgb2YgUHVibGljIEhlYWx0aDogaHR0cHM6Ly9kYXRhLmN0Lmdvdi9zdG9yaWVzL3MvQ09WSUQtMTktZGF0YS93YTNnLXRmdmMvCiAgKiBPaGlvIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL2Nvcm9uYXZpcnVzLm9oaW8uZ292L3dwcy9wb3J0YWwvZ292L2NvdmlkLTE5L2hvbWUKICAqIE9yZWdvbiBPZmZpY2Ugb2YgRW1lcmdlbmN5IE1hbmFnZW1lbnQ6IGh0dHBzOi8vZXhwZXJpZW5jZS5hcmNnaXMuY29tL2V4cGVyaWVuY2UvZmZmOWY4MzgyN2M1NDYxNTgzY2QwMTRmZGY0NTg3ZGUKICAqIFRlbm5lc3NlZSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cudG4uZ292L2hlYWx0aC9jZWRlcC9uY292Lmh0bWwKICAqIFJob2RlIElzbGFuZCBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9yaS1kZXBhcnRtZW50LW9mLWhlYWx0aC1jb3ZpZC0xOS1kYXRhLXJpaGVhbHRoLmh1Yi5hcmNnaXMuY29tLwogICogV2lzY29uc2luIERlcGFydG1lbnQgb2YgSGVhbHRoIFNlcnZpY2VzOiBodHRwczovL3d3dy5kaHMud2lzY29uc2luLmdvdi9jb3ZpZC0xOS9kYXRhLmh0bQogICogTm9ydGggQ2Fyb2xpbmEgQ2l0eSBvZiBHcmVlbnZpbGxlIEdJUzogaHR0cHM6Ly93d3cuYXJjZ2lzLmNvbS9hcHBzL29wc2Rhc2hib2FyZC9pbmRleC5odG1sIy83YWVhYzY5NWNhZmE0MDY1YmExNTA1YjFjZmE3Mjc0NwogICogSW93YSBTdGF0ZSBHb3Zlcm5tZW50OiBodHRwczovL2Nvcm9uYXZpcnVzLmlvd2EuZ292LwogICogTWlubmVzb3RhIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5oZWFsdGguc3RhdGUubW4udXMvZGlzZWFzZXMvY29yb25hdmlydXMvc2l0dWF0aW9uLmh0bWwKICAqIEFsYWJhbWEgU2FtZm9yZCBVbml2ZXJzaXR5J3MgRGVwYXJ0bWVudCBvZiBHZW9ncmFwaHkgYW5kIFNvY2lvbG9neTogaHR0cHM6Ly9leHBlcmllbmNlLmFyY2dpcy5jb20vZXhwZXJpZW5jZS9lMDNmODdlNDhhMjM0ZmVlYmJhZDI3ZDBlZTdmZjgyNAogICogTWlzc2lzc2lwcGkgU3RhdGUgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vbXNkaC5tcy5nb3YvbXNkaHNpdGUvX3N0YXRpYy8xNCwwLDQyMC5odG1sCiAgKiBOZWJyYXNrYSBEZXBhcnRtZW50IG9mIEhlYWx0aCBhbmQgSHVtYW4gU2VydmljZXM6IGh0dHBzOi8vZXhwZXJpZW5jZS5hcmNnaXMuY29tL2V4cGVyaWVuY2UvZWNlMGRiMDlkYTRkNGNhNjgyNTJjMzk2N2FhMWU5ZGQKICAqIFNvdXRoIENhcm9saW5hIERlcGFydG1lbnQgb2YgSGVhbHRoIGFuZCBFbnZpcm9ubWVudGFsIENvbnRyb2w6IGh0dHBzOi8vc2NkaGVjLmdvdi9pbmZlY3Rpb3VzLWRpc2Vhc2VzL3ZpcnVzZXMvY29yb25hdmlydXMtZGlzZWFzZS0yMDE5LWNvdmlkLTE5L3NjLXRlc3RpbmctZGF0YS1wcm9qZWN0aW9ucy1jb3ZpZC0xOQogICogTmV2YWRhIERlcGFydG1lbnQgb2YgSGVhbHRoIGFuZCBIdW1hbiBTZXJ2aWNlczogaHR0cHM6Ly9udmhlYWx0aHJlc3BvbnNlLm52Lmdvdi8KICAqIE5ldyBKZXJzZXkgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vY292aWQxOS5uai5nb3YvCiAgKiBEZWxhd2FyZSBFbWVyZ2VuY3kgTWFuYWdlbWVudCBBZ2VuY3k6IGh0dHBzOi8vY29yb25hdmlydXMuZGVsYXdhcmUuZ292LwogICogVXRhaCBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9jb3JvbmF2aXJ1cy1kYXNoYm9hcmQudXRhaC5nb3YvI292ZXJ2aWV3CiAgKiBBcml6b25hIEVtZXJnZW5jeSBTdXBwb3J0IEZ1bmN0aW9uIChFU0YpL1JlY292ZXJ5IFN1cHBvcnQgRnVuY3Rpb24gKFJTRikgT3BlcmF0aW9ucyBEYXNoYm9hcmQ6IGh0dHBzOi8vd3d3LmFyY2dpcy5jb20vYXBwcy9NYXBTZXJpZXMvaW5kZXguaHRtbD9hcHBpZD02MmU2YmZhNjgyYTM0ZTZhYWU5ZDkyNTVhYzg2NTQ2NwogICogRGVwYXJ0YW1lbnRvIGRlIFNhbHVkLCBQdWVydG8gUmljbzogaHR0cHM6Ly9iaW9zZWd1cmlkYWQubWFwcy5hcmNnaXMuY29tL2FwcHMvb3BzZGFzaGJvYXJkL2luZGV4Lmh0bWwjL2Q3MzA4YzFhYmI0NzQ3ZTU4NDMyOWFkZjEyMTUxMjVlCiAgKiBBcmthbnNhcyBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9leHBlcmllbmNlLmFyY2dpcy5jb20vZXhwZXJpZW5jZS9jMmVmNGE0ZmNiZTU0NThmYmYyZTQ4YTIxZTRmZWNlOQogICogTWFpbmUgRGVwYXJ0bWVudCBvZiBIZWFsdGggYW5kIEh1bWFuIFNlcnZpY2VzOiBodHRwczovL3d3dy5tYWluZS5nb3YvZGhocy9tZWNkYy9pbmZlY3Rpb3VzLWRpc2Vhc2UvZXBpL2FpcmJvcm5lL2Nvcm9uYXZpcnVzL2RhdGEuc2h0bWwKICAqIFBlbm5zeWx2YW5pYSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cuaGVhbHRoLnBhLmdvdi90b3BpY3MvZGlzZWFzZS9jb3JvbmF2aXJ1cy9QYWdlcy9DYXNlcy5hc3B4CiAgKiBDaXR5IG9mIFBoaWxhZGVscGhpYTogaHR0cHM6Ly93d3cucGhpbGEuZ292L3Byb2dyYW1zL2Nvcm9uYXZpcnVzLWRpc2Vhc2UtMjAxOS1jb3ZpZC0xOS8KICAqIExhbmNhc3RlciBDb3VudHk6IGh0dHBzOi8vY292aWQtMTktbGFuY2FzdGVyY291bnR5cGEuaHViLmFyY2dpcy5jb20vCiAgKiBDaGVzdGVyIENvdW50eTogaHR0cHM6Ly9jaGVzY28ubWFwcy5hcmNnaXMuY29tL2FwcHMvb3BzZGFzaGJvYXJkL2luZGV4Lmh0bWwjLzk3NTA4MmQ1Nzk0NTRjM2NhNzg3N2RiMGE0NGU2MWNhCiAgKiBMb3Vpc2lhbmEgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHA6Ly9sZGgubGEuZ292L2Nvcm9uYXZpcnVzLwogICogR292ZXJubWVudCBvZiBUaGUgRGlzdHJpY3Qgb2YgQ29sdW1iaWE6IGh0dHBzOi8vY29yb25hdmlydXMuZGMuZ292L3BhZ2UvY29yb25hdmlydXMtZGF0YSAKCiogTm9uLVVTIGRhdGEgc291cmNlcyBhdCB0aGUgY291bnRyeS9yZWdpb24gKEFkbWluMCkgb3Igc3RhdGUvcHJvdmluY2UgKEFkbWluMSkgbGV2ZWw6CiAgKiBOYXRpb25hbCBIZWFsdGggQ29tbWlzc2lvbiBvZiB0aGUgUGVvcGxl4oCZcyBSZXB1YmxpYyBvZiBDaGluYSAoTkhDKToKICAgIGh0dHA6Ly93d3cubmhjLmdvdi5jbi94Y3MveXF0Yi9saXN0X2d6YmQuc2h0bWwKICAqIENoaW5hIENEQyAoQ0NEQyk6IGh0dHA6Ly93ZWVrbHkuY2hpbmFjZGMuY24vbmV3cy9UcmFja2luZ3RoZUVwaWRlbWljLmh0bQogICogSG9uZyBLb25nIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5jaHAuZ292LmhrL2VuL2ZlYXR1cmVzLzEwMjQ2NS5odG1sCiAgKiBNYWNhdSBHb3Zlcm5tZW50OiBodHRwczovL3d3dy5zc20uZ292Lm1vL3BvcnRhbC8KICAqIFRhaXdhbiBDREM6IGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9jZGMuZ292LnR3LzIwMTluY292L3RhaXdhbj9hdXRodXNlcj0wCiAgKiBHb3Zlcm5tZW50IG9mIENhbmFkYTogaHR0cHM6Ly93d3cuY2FuYWRhLmNhL2VuL3B1YmxpYy1oZWFsdGgvc2VydmljZXMvZGlzZWFzZXMvY29yb25hdmlydXMuaHRtbAogICogQXVzdHJhbGlhIEdvdmVybm1lbnQgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmhlYWx0aC5nb3YuYXUvbmV3cy9jb3JvbmF2aXJ1cy11cGRhdGUtYXQtYS1nbGFuY2UKICAqIENPVklEIExpdmUgKEF1c3RyYWxpYSk6IGh0dHBzOi8vd3d3LmNvdmlkbGl2ZS5jb20uYXUvCiAgKiBNaW5pc3RyeSBvZiBIZWFsdGggU2luZ2Fwb3JlIChNT0gpOiBodHRwczovL3d3dy5tb2guZ292LnNnL2NvdmlkLTE5CiAgKiBJdGFseSBNaW5pc3RyeSBvZiBIZWFsdGg6IGh0dHA6Ly93d3cuc2FsdXRlLmdvdi5pdC9udW92b2Nvcm9uYXZpcnVzCiAgKiBEYXRpIENPVklELTE5IEl0YWxpYSAoSXRhbHkpOiBodHRwczovL2dpdGh1Yi5jb20vcGNtLWRwYy9DT1ZJRC0xOS90cmVlL21hc3Rlci9kYXRpLXJlZ2lvbmkKICAqIEZyZW5jaCBHb3Zlcm5tZW50OiBodHRwczovL2Rhc2hib2FyZC5jb3ZpZDE5LmRhdGEuZ291di5mci8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuY292aWQxOS1mci9kYXRhL2Jsb2IvbWFzdGVyL2Rpc3QvY2hpZmZyZXMtY2xlcy5qc29uCiAgKiBPcGVuQ09WSUQxOSBGcmFuY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuY292aWQxOS1mcgogICogUGFsZXN0aW5lIChXZXN0IEJhbmsgYW5kIEdhemEpOiBodHRwczovL2Nvcm9uYS5wcy9kZXRhaWxzCiAgKiBJc3JhZWw6IGh0dHBzOi8vZ292ZXh0cmEuZ292LmlsL21pbmlzdHJ5LW9mLWhlYWx0aC9jb3JvbmEvY29yb25hLXZpcnVzLwogICogTWluaXN0cnkgb2YgSGVhbHRoLCBSZXB1YmxpYyBvZiBLb3Nvdm86IGh0dHBzOi8va29zb3ZhLmhlYWx0aC8gYW5kIGh0dHBzOi8vY292aWRrcy5zMy5hbWF6b25hd3MuY29tL2RhdGEuanNvbgogICogQmVybGluZXIgTW9yZ2VucG9zdCAoR2VybWFueSk6IGh0dHBzOi8vaW50ZXJha3Rpdi5tb3JnZW5wb3N0LmRlL2Nvcm9uYS12aXJ1cy1rYXJ0ZS1pbmZla3Rpb25lbi1kZXV0c2NobGFuZC13ZWx0d2VpdC8KICAqIHJ0dmUgKFNwYWluKTogaHR0cHM6Ly93d3cucnR2ZS5lcy9ub3RpY2lhcy8yMDIwMDUxNC9tYXBhLWRlbC1jb3JvbmF2aXJ1cy1lc3BhbmEvMjAwNDY4MS5zaHRtbAogICogTWluaXN0cnkgb2YgSGVhbHRoLCBSZXB1YmxpYyBvZiBTZXJiaWE6IGh0dHBzOi8vY292aWQxOS5ycy9ob21lcGFnZS1lbmdsaXNoLyAKICAqIENoaWxlOiBodHRwczovL3d3dy5taW5zYWwuY2wvbnVldm8tY29yb25hdmlydXMtMjAxOS1uY292L2Nhc29zLWNvbmZpcm1hZG9zLWVuLWNoaWxlLWNvdmlkLTE5LwogICogQnJhemlsIE1pbmlzdHJ5IG9mIEhlYWx0aDogaHR0cHM6Ly9jb3ZpZC5zYXVkZS5nb3YuYnIvCiAgKiBCcmF6aWw6IGh0dHBzOi8vZ2l0aHViLmNvbS93Y290YS9jb3ZpZDE5YnIuIERhdGEgZGVzY3JpYmVkIGluIFtET0k6IDEwLjE1OTAvU2NpRUxPUHJlcHJpbnRzLjM2Ml0oaHR0cHM6Ly9kb2kub3JnLzEwLjE1OTAvU2NpRUxPUHJlcHJpbnRzLjM2MikKICAqIEdvYmllcm9ubyBEZSBNZXhpY286aHR0cHM6Ly9jb3ZpZDE5LnNpbmF2ZS5nb2IubXgvCiAgKiBKYXBhbiBDT1ZJRC0xOSBDb3JvbmF2aXJ1cyBUcmFja2VyOiBodHRwczovL2NvdmlkMTlqYXBhbi5jb20vI2FsbC1wcmVmZWN0dXJlcwogICogTW9uaXRvcmVvIGRlbCBDT1ZJRC0xOSBlbiBQZXLDuiAtICBQb2xpY8OtYSBOYWNpb25hbCBkZWwgUGVyw7ogKFBOUCkgLSBEaXJlY2Npw7NuIGRlIEludGVsaWdlbmNpYSAoRElSSU4pOiBodHRwczovL3d3dy5hcmNnaXMuY29tL2FwcHMvb3BzZGFzaGJvYXJkL2luZGV4Lmh0bWwjL2Y5MGE3YTg3YWYyNTQ4Njk5ZDZlN2JiNzJmNTU0N2MyIGFuZCBNaW5pc3RlcmlvIGRlIFNhbHVkIGRlbCBQZXLDujogaHR0cHM6Ly9jb3ZpZDE5Lm1pbnNhLmdvYi5wZS9zYWxhX3NpdHVhY2lvbmFsLmFzcAogIENvbG9tYmlhIE5hdGlvbmFsIEluc3RpdHV0ZSBvZiBIZWFsdGg6IGh0dHA6Ly93d3cuaW5zLmdvdi5jby9Ob3RpY2lhcy9QYWdpbmFzL0Nvcm9uYXZpcnVzLmFzcHgKICBSdXNzaWE6IGh0dHBzOi8veG4tLTgwYWVzZnBlYmFnbWZibGMwYS54bi0tcDFhaS9pbmZvcm1hdGlvbi8KICBVa3JhaW5lOiBodHRwczovL2NvdmlkMTkucm5iby5nb3YudWEvCiAgUHVibGljIEhlYWx0aCBBZ2VuY3kgb2YgU3dlZGVuOiBodHRwczovL2V4cGVyaWVuY2UuYXJjZ2lzLmNvbS9leHBlcmllbmNlLzA5ZjgyMTY2N2NlNjRiZjdiZTZmOWY4NzQ1N2VkOWFhCiAgSW5kaWEgTWluaXN0cnkgb2YgSGVhbHRoIGFuZCBGYW1pbHkgV2VsZmFyZTogaHR0cHM6Ly93d3cubW9oZncuZ292LmluLwogIEdvdmVybm1lbnQgb2YgUGFraXN0YW46IGh0dHA6Ly9jb3ZpZC5nb3YucGsvc3RhdHMvcGFraXN0YW4KICBUaGUgVUsgR292ZXJubWVudDogaHR0cHM6Ly9jb3JvbmF2aXJ1cy5kYXRhLmdvdi51ay8jY2F0ZWdvcnk9bmF0aW9ucyZtYXA9cmF0ZQogIFNjb3R0aXNoIEdvdmVybm1lbnQ6IGh0dHBzOi8vd3d3Lmdvdi5zY290L3B1YmxpY2F0aW9ucy9jb3JvbmF2aXJ1cy1jb3ZpZC0xOS10cmVuZHMtaW4tZGFpbHktZGF0YS8KICBOZXRoZXJsYW5kcyBOYXRpb25hbCBJbnN0aXR1dGUgZm9yIEhlYWx0aCBhbmQgRW52aXJvbm1lbnQ6IGh0dHBzOi8vZXhwZXJpZW5jZS5hcmNnaXMuY29tL2V4cGVyaWVuY2UvZWEwNjQwNDc1MTkwNDA0NjlhY2I4ZGEwNWMwZjEwMGQKICBJY2VsYW5kIFRoZSBEaXJlY3RvcmF0ZSBvZiBIZWFsdGggYW5kIFRoZSBEZXBhcnRtZW50IG9mIENpdmlsIFByb3RlY3Rpb24gYW5kIEVtZXJnZW5jeSBNYW5hZ2VtZW50OiBodHRwczovL3d3dy5jb3ZpZC5pcy9kYXRhCgojIyBUZXJtcyBvZiBVc2UKCiogRGF0YSA6IENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwgKENDIEJZIDQuMCkgYnkgdGhlIEpvaG5zIEhvcGtpbnMgVW5pdmVyc2l0eSBvbiBiZWhhbGYgb2YgaXRzIENlbnRlciBmb3IgU3lzdGVtcyBTY2llbmNlIGluIEVuZ2luZWVyaW5nLiAgQ29weXJpZ2h0IEpvaG5zIEhvcGtpbnMgVW5pdmVyc2l0eSAyMDIwLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZC4KKiBTb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyBncmFwaHM6IENvcHlyaWdodCBQaGlsaXBwZSBEb2NvdXJ0LiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KKiBHcmFwaGljcyA6IFB1YmxpYyBEb21haW4KCg==